package PERSONAJES;

import java.awt.Graphics;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.Serializable;

import javax.imageio.ImageIO;


import JUEGO.Juego;

import UTILIDADES.Inventario;

public class Personaje implements Serializable{

	public int getVidaMax() {
		return vidaMax;
	}

	public void setVidaMax(int vidaMax) {
		this.vidaMax = vidaMax;
	}

	public String getNombre() {
		return nombre;
	}

	public void setNombre(String nombre) {
		this.nombre = nombre;
	}

	public void setCuracion(int curacion) {
		this.curacion = curacion;
	}

	public int getAtaque() {
		return ataque;
	}

	public void setAtaque(int ataque) {
		this.ataque = ataque;
	}

	public int getDefensa() {
		return defensa;
	}

	public void setDefensa(int defensa) {
		this.defensa = defensa;
	}

	public Inventario getInventario() {
		return inventario;
	}

	public void setInventario(Inventario inventario) {
		this.inventario = inventario;
	}

	public BufferedImage getImgAtk() {
		return imgAtk;
	}

	public void setImgAtk(BufferedImage imgAtk) {
		this.imgAtk = imgAtk;
	}

	public BufferedImage getImgDef() {
		return imgDef;
	}

	public void setImgDef(BufferedImage imgDef) {
		this.imgDef = imgDef;
	}

	public BufferedImage getImgHP() {
		return imgHP;
	}

	public void setImgHP(BufferedImage imgHP) {
		this.imgHP = imgHP;
	}

	
	private int vidaMax;
	private String nombre;
	private int vidaActual;
	private int tipo;
	private int ataque;
	private int defensa;
	private int curacion;//solo rabonas
	private Inventario inventario;
	transient private BufferedImage imgAtk, imgDef, imgHP;

	/*
	 1	rabona
	2	indigena
	3	fusilero
	4	infante
	5	artillero
	6	heroe
	 */
	public void mostrarPersonaje(){
		
		switch (this.tipo){
		
		case 1: System.out.println("Rabona:");break;
		case 2: System.out.println("Indigena:");break;
		case 3: System.out.println("Fusilero:");break;
		case 4: System.out.println("Infante:");break;
		case 5: System.out.println("Artillero:");break;
		case 6: System.out.println("Jose Angulo:");break;
		}
		System.out.println("Hp: "+this.vidaActual + ", Ataque: "+this.ataqueTotalPersonaje()+", Defensa: "+this.defTotalPersonaje());
		this.inventario.mostrarInventario();
		
		
	}
	
	public void mostrarPersonajeVentana(Graphics g, int p, int q){
		
		String pers = "";
		
		switch (this.tipo){
		case 1: pers = "Rabona:";break;
		case 2: pers = "Indigena:";break;
		case 3: pers = "Fusilero:";break;
		case 4: pers = "Infante:";break;
		case 5: pers = "Artillero:";break;
		case 6: pers = "Jose Angulo:";break;
		}
		
		try{
			imgHP = ImageIO.read(new File("Descripcion/HPImg.png"));	
			imgAtk = ImageIO.read(new File("Descripcion/AtaqueImg.png"));
			imgDef = ImageIO.read(new File("Descripcion/DefensaImg.png"));

		}catch(java.io.IOException e){

		}catch(Exception ex){
		}finally{

		}
		
//		g.drawString(pers, p, q);
//		q += 20;
//		pers = "-Hp: "+this.vidaActual +"/"+ this.vidaMax + ", Ataque: "+this.ataqueTotalPersonaje()+", Defensa: "+this.defTotalPersonaje();
//		g.drawString(pers, p, q);
//		this.inventario.mostrarInventarioVentana(g, p, q+20);
		
		g.drawString(pers, p, q);
		q += 10;
		g.drawImage(imgHP, p, q, Juego.D);
		q += 18; p += 30;
		pers = this.vidaActual +"/"+ this.vidaMax;
		g.drawString(pers, p, q);
		q -= 18; p += 60;
		g.drawImage(imgAtk, p, q, Juego.D);
		q += 18; p += 30;
		pers = this.ataqueTotalPersonaje() + "";
		g.drawString(pers, p, q);
		q -= 18; p += 30;
		g.drawImage(imgDef, p, q, Juego.D);
		q += 18; p += 30;
		pers = this.defTotalPersonaje() + "";
		g.drawString(pers, p, q);
		this.inventario.mostrarInventarioVentana(g, p-180, q+15);
		
		
	}
    public Personaje(int tipo) {
    	tipo--;
    	this.vidaMax	 = Juego.vPers.elementAt(tipo).getVidaMax();
    	this.vidaActual = Juego.vPers.elementAt(tipo).getVidaMax();
    	this.curacion = Juego.vPers.elementAt(tipo).getCuracion();
    	this.tipo=tipo+1;
    	inventario=new Inventario(tipo+1);
    	this.ataque = Juego.vPers.elementAt(tipo).getAtaque();;
    	this.defensa = Juego.vPers.elementAt(tipo).getDefensa();
    }
    
    public Personaje(int hpActu,int tipo) {
    	tipo--;
    	this.vidaMax	 = Juego.vPers.elementAt(tipo).getVidaMax();
    	this.vidaActual = hpActu;
    	this.curacion = Juego.vPers.elementAt(tipo).getCuracion();
    	this.tipo=tipo+1;
    	inventario=new Inventario(tipo+1);
    	this.ataque = Juego.vPers.elementAt(tipo).getAtaque();;
    	this.defensa = Juego.vPers.elementAt(tipo).getDefensa();
    }
    

	public Personaje() {
		int a;
	}

	public int getTipo() {return tipo;}
	public void setTipo(int tipo) {this.tipo = tipo;}
    public int getCuracion() {return curacion;}
	public void setVidaActual(int vidaActual) {this.vidaActual = vidaActual;}
	public int getVidaActual() {return vidaActual;}
	public int ataqueInventario(){return inventario.calcularAtaque();}
	public int defInventario(){return inventario.calcularDef();}
	
	public int ataqueTotalPersonaje(){
		return ataque+ataqueInventario();
	}
	
	public int defTotalPersonaje(){
		return defensa+defInventario();
	}
	
	public int tuplasAtaque(int codPersonaje,int codArma){
		if (codPersonaje==2){
			if(codArma==1 ||codArma==2 ||codArma==6 || codArma==7 ||codArma==9) return 1;
			return 0;
		}
		if (codPersonaje==3){
			if(codArma==4) return 1;
			return 0;
		}
		if (codPersonaje==4){
			if(codArma==3 || codArma==8) return 1;
			return 0;
		}
		if (codPersonaje==5){
			if(codArma==5) return 1;
			return 0;
		}
		if (codPersonaje==6){
			if(codArma==1 ||codArma==2 ||codArma==4 ||codArma==6 || codArma==7 ||codArma==9) return 1;
			return 0;
		}
		return 0;
	}
	
	public int agregarArmaAtaque(int codArma){

		
    	if (tuplasAtaque(tipo, codArma)==1) {	
    		if (inventario.agregaArmaAtaque(codArma)==1){
    			//System.out.println("El arma ha sido integrado");
        		return 1;	
    		}
    	}
    	//else System.out.println("No se le puede agregar este tipo de arma a este personaje");
    	return 0;
    }
   
	
	public int agregarArmaDef(int codArma){
    	if (tuplasDef(tipo, codArma)==1) {
    		if (inventario.agregaArmaDef(codArma)==1){
    			//System.out.println("El arma ha sido integrado");
        		return 1;	
    		}
    	}
    	//else System.out.println("No se le puede agregar este tipo de arma a este personaje");
    	return 0;
    }
	
	public void removerArmaAtaque(int posArma){
		inventario.quitarArmaAtaque(posArma);
	}
	
	public void removerArmaDef(int posArma){
		inventario.quitarArmaDef(posArma);
	}
	
    public int tuplasDef(int codPersonaje,int codArma){
		if (codPersonaje==2 || codPersonaje==6){
			if(codArma==1 || codArma==2 || codArma==3) return 1;
			return 0;
		}
		if (codPersonaje==3 || codPersonaje==4 || codPersonaje==5 || codPersonaje==6){
			if(codArma==4 || codArma==5) return 1;
			return 0;
		}
		return 0;
	}
    
    
}